 package utiles;

import java.util.Calendar;
import java.util.GregorianCalendar;
/**
 *
 * @author Efren
 */
public class ConversorFecha {
    /**
     * Devuelve un String compatible con el formato DATETIME soportado por MySQL apto para usar en consultas SQL.
     * @param fecha
     * @return 
     */
    public static String getFechaFormatoBD(GregorianCalendar fecha){
        return fecha.get(Calendar.YEAR) + "-" + (fecha.get(Calendar.MONTH) +1) + "-" + fecha.get(Calendar.DAY_OF_MONTH) + " " + fecha.get(Calendar.HOUR_OF_DAY)+ ":" + formatearEntero(fecha.get(Calendar.MINUTE)) + ":" + fecha.get(Calendar.SECOND);
    }
    /**
     * Transforma un objeto sql.Date en GregorianCalendar. Apto para recuperar datos de consultas SQL.
     * @param date
     * @return 
     */
    public static GregorianCalendar obtenerFecha(java.sql.Date date){
        GregorianCalendar temp = new GregorianCalendar();
        temp.setTimeInMillis(date.getTime());
        return temp;
    }
    /**
     * Transforma un objeto util.Date en GregorianCalendar.
     * @param date
     * @return 
     */
    public static GregorianCalendar obtenerFecha(java.util.Date date){
        GregorianCalendar temp = new GregorianCalendar();
        temp.setTime(date);
        return temp;
    }
    /**
     * Obtiene la fecha pasada como parametro formateada como indica la zona actual.
     * @param fecha
     * @return 
     */
    public static String formateadorFecha(GregorianCalendar fecha){
        if (fecha == null){
            return "00/00/0000 00:00";
        }
        return formatearEntero(fecha.get(Calendar.DAY_OF_MONTH)) + "/" + formatearEntero((fecha.get(Calendar.MONTH) +1))  + "/" +fecha.get(Calendar.YEAR) + " " + formatearEntero(fecha.get(Calendar.HOUR_OF_DAY))+":"+ formatearEntero(fecha.get(Calendar.MINUTE));
    }
    public static String formatearSoloFecha(GregorianCalendar fecha){
        if (fecha == null){
            return "0000-00-00";
        }
        return fecha.get(Calendar.YEAR) + "-" + (fecha.get(Calendar.MONTH) +1) + "-" + fecha.get(Calendar.DAY_OF_MONTH);
    }
    private static String formatearEntero(int a){
        if (a < 10){
            return "0"+a;
        }
        return ""+a;
    }
    public static String formatearFecha(GregorianCalendar fecha){
         return fecha.get(Calendar.YEAR) + "-" + (fecha.get(Calendar.MONTH) +1) + "-" + fecha.get(Calendar.DAY_OF_MONTH);
    }
    public static GregorianCalendar obtenerFecha(String fecha){
         int dia, mes, año;
        String smes;
        int indice = 0;
        String[] split = fecha.split("-");
        año = Integer.parseInt(split[0]);
        mes = Integer.parseInt(split[1]);
        mes--;
        dia = Integer.parseInt(split[2].substring(0, split[2].indexOf(" ")));
        int a = fecha.indexOf(" ");
        int b = fecha.indexOf(":");
        int hora, minuto, segundo;
        a++;
        hora = Integer.parseInt(fecha.substring(a, b));
        a = b + 1;
        b = fecha.indexOf(":", a);
        minuto = Integer.parseInt(fecha.substring(a, b));
        b++;
        segundo = Integer.parseInt(fecha.substring(b,fecha.indexOf(".")));
        return new GregorianCalendar(año, mes, dia,hora,minuto,segundo);
    }
    public static GregorianCalendar obtenerSoloFecha(String fecha){
         int dia, mes, año;
        String[] split = fecha.split("-");
        año = Integer.parseInt(split[0]);
        mes = Integer.parseInt(split[1]);
        mes--;
        dia = Integer.parseInt(split[2]);
        return new GregorianCalendar(año, mes, dia);
    }
    public static GregorianCalendar recuperarFechaddMMMaa(String fecha){
        int dia, mes, año;
        String smes;
        int indice = 0;
        String[] split = fecha.split("-");
        dia = Integer.parseInt(split[0]);
        smes = split[1];
        año = Integer.parseInt(split[2]);
        switch (smes){
            case "ene":
                mes = 0;
                break;
            case "feb":
                mes = 1;
                break;
            case "mar":
                mes = 2;
                break;
            case "abr":
                mes = 3;
                break;
            case "may":
                mes = 4;
                break;
            case "jun":
                mes = 5;
                break;
            case "jul":
                mes = 6;
                break;
            case "ago":
                mes = 7;
                break;
            case "sep":
                mes = 8;
                break;
            case "oct":
                mes = 9;
                break;
            case "nov":
                mes = 10;
               break;
            case "dic":
                mes = 11;
                break;
            default:
                mes = 0;
        }
        return new GregorianCalendar(año, mes, dia);
    }
}  

